package com.tangruojie.service.impl;

import com.tangruojie.dao.AccountDao;
import com.tangruojie.domain.Account;
import com.tangruojie.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

    public void save(Account account) {
        accountDao.save(account);
    }

    public void update(Account account) {
        accountDao.update(account);
    }

    public void delete(Integer id) {
        accountDao.delete(id);
    }

    public Account findById(Integer id) {
        return accountDao.findById(id);
    }

    /**
     * 你调用：accountService.findAll()
     *             ↓
     * accountDao.findAll() ← 实际是 Mapper 代理对象
     *             ↓
     * SqlSessionTemplate → 调用 mapper XML/注解 → 执行 SQL
     *             ↓
     * 返回 List<Account>
     */
    /**
     * Spring 整合 MyBatis 后，自动通过代理 + SqlSessionTemplate 管理了对数据库的访问流程。你只需要调用接口方法，Spring 会在底层帮你完成所有操作。
     */
    public List<Account> findAll() {
        /**
         * 这个 accountDao 是个 由 Spring 和 MyBatis 联合创建的 Mapper 代理对象，它底层会这样操作：
         * // AccountDao 是接口
         * // 代理对象代理了这个接口，内部实现了如下逻辑：
         * SqlSession session = sqlSessionFactory.openSession();
         * AccountDao accountDao = session.getMapper(AccountDao.class);
         * return accountDao.findAll();  // 真正执行 SQL
         */
        return accountDao.findAll(); // 🔥 看似普通，其实是代理
    }

}
